home *** CD-ROM | disk | FTP | other *** search
/ ASME's Mechanical Engine…ing Toolkit 1997 December / ASME's Mechanical Engineering Toolkit 1997 December.iso / c_lang / sc.zoo / sc.h < prev    next >
Encoding:
C/C++ Source or Header  |  1988-06-03  |  3.5 KB  |  170 lines

  1. /*    SC    A Table Calculator
  2.  *        Common definitions
  3.  *
  4.  *        original by James Gosling, September 1982
  5.  *        modified by Mark Weiser and Bruce Israel,
  6.  *            University of Maryland
  7.  *        R. Bond  12/86
  8.  *
  9.  */
  10.  
  11.  
  12.  
  13. #define MAXROWS 200
  14. #define MAXCOLS 40
  15. #define RESCOL 4  /* columns reserved for row numbers */
  16. #define RESROW 3  /* rows reserved for prompt, error, and column numbers */
  17. #define error move(1,0), clrtoeol(), (void) printw
  18.  
  19. struct ent_ptr {
  20.     int vf;
  21.     struct ent *vp;
  22. };
  23.  
  24. struct range_s {
  25.     struct ent_ptr left, right;
  26. };
  27.  
  28. /*
  29.  * If you want to save room, make row and col below into unsigned
  30.  * chars and make sure MAXROWS and MAXCOLS above are both less
  31.  * than 256.  (128 if your compiler doesn't support unsigned char).
  32.  *
  33.  * Some not too obvious things about the flags:
  34.  *    is_valid means there is a valid number in v.
  35.  *    label set means it points to a valid constant string.
  36.  *    is_strexpr set means expr yields a string expression.
  37.  *    If is_strexpr is not set, and expr points to an expression tree, the
  38.  *        expression yields a numeric expression.
  39.  *    So, either v or label can be set to a constant. 
  40.  *        Either (but not both at the same time) can be set from an expression.
  41.  */
  42.  
  43. #define VALID_CELL(p, r, c) ((p = tbl[r][c])&&((p->flags&is_valid)||p->label))
  44.  
  45. struct ent {
  46.     double v;
  47.     char *label;
  48.     struct enode *expr;
  49.     short flags;
  50.     short row, col;
  51.     struct ent *next;
  52. };
  53.  
  54. struct range {
  55.     struct ent_ptr r_left, r_right;
  56.     char *r_name;
  57.     struct range *r_next, *r_prev;
  58.     int r_is_range;
  59. };
  60.  
  61. #define FIX_ROW 1
  62. #define FIX_COL 2
  63.  
  64. struct enode {
  65.     int op;
  66.     union {
  67.     double k;
  68.     struct ent_ptr v;
  69.     struct range_s r;
  70.     char *s;
  71.     struct {
  72.         struct enode *left, *right;
  73.     } o;
  74.     } e;
  75. };
  76.  
  77. /* op values */
  78. #define O_VAR 'v'
  79. #define O_CONST 'k'
  80. #define O_SCONST '$'
  81. #define O_REDUCE(c) (c+0200)
  82.  
  83. #define ACOS 0
  84. #define ASIN 1
  85. #define ATAN 2
  86. #define CEIL 3
  87. #define COS 4
  88. #define EXP 5 
  89. #define FABS 6 
  90. #define FLOOR 7
  91. #define HYPOT 8
  92. #define LOG 9
  93. #define LOG10 10
  94. #define POW 11
  95. #define SIN 12
  96. #define SQRT 13
  97. #define TAN 14
  98. #define DTR 15
  99. #define RTD 16
  100. #define MIN 17
  101. #define MAX 18
  102. #define RND 19
  103. #define HOUR 20
  104. #define MINUTE 21
  105. #define SECOND 22
  106. #define MONTH 23
  107. #define DAY 24
  108. #define YEAR 25
  109. #define NOW 26
  110. #define DATE 27
  111. #define FMT 28
  112. #define SUBSTR 29
  113. #define STON 30
  114. #define EQS 31
  115.  
  116. /* flag values */
  117. #define is_valid     0001
  118. #define is_changed   0002
  119. #define is_strexpr   0004
  120. #define is_leftflush 0010
  121. #define is_deleted   0020
  122.  
  123. #define ctl(c) ('c'&037)
  124.  
  125. extern struct ent *tbl[MAXROWS][MAXCOLS];
  126.  
  127. extern int strow, stcol;
  128. extern int currow, curcol;
  129. extern int savedrow, savedcol;
  130. extern int FullUpdate;
  131. extern int maxrow, maxcol;
  132. extern int fwidth[MAXCOLS];
  133. extern int precision[MAXCOLS];
  134. extern char col_hidden[MAXCOLS];
  135. extern char row_hidden[MAXROWS];
  136. extern char line[1000];
  137. extern int linelim;
  138. extern int changed;
  139. extern struct ent *to_fix;
  140. extern int showsc, showsr;
  141. extern struct enode *new();
  142. extern struct enode *new_const();
  143. extern struct enode *new_var();
  144. extern struct enode *new_str();
  145. extern struct enode *new_range();
  146. extern struct ent *lookat();
  147. extern struct enode *copye();
  148. extern char *coltoa();
  149. extern FILE *openout();
  150. extern struct range *find_range();
  151. extern char *v_name();
  152. extern char *r_name();
  153. extern double eval();
  154. extern char *seval();
  155. extern int modflg;
  156. extern int Crypt;
  157. extern char *mdir;
  158. extern char *xmalloc();
  159. extern int xfree();
  160.  
  161. #if BSD42 || SYSIII
  162.  
  163. #ifndef cbreak
  164. #define    cbreak        crmode
  165. #define    nocbreak    nocrmode
  166. #endif
  167.  
  168. #endif
  169.  
  170.